package com.cdu.guoxinan.www.smartcom.controller;

import com.cdu.guoxinan.www.smartcom.tool.OssUtil;
import com.cdu.guoxinan.www.smartcom.unit.model.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

@RestController
@RequestMapping("/oss")
public class OssController {
    @Autowired
    private OssUtil ossUtil;

    @PostMapping("/upload")
    public R upload(@RequestParam("file") MultipartFile file) {
        try {
            String url = ossUtil.upload(file);
            return R.ok(url);
        } catch (Exception e) {
            return R.error("上传失败: " + e.getMessage());
        }
    }

    /**
     * 更新文件（上传新文件并删除旧文件）
     * @param file 新文件
     * @param oldFileUrl 旧文件URL
     * @return 更新结果
     */
    @PostMapping("/update")
    public R updateFile(@RequestParam("file") MultipartFile file,
                       @RequestParam(value = "oldFileUrl", required = false) String oldFileUrl) {
        try {
            String newFileUrl = ossUtil.updateFile(file, oldFileUrl);
            return R.ok(newFileUrl);
        } catch (Exception e) {
            return R.error("文件更新失败: " + e.getMessage());
        }
    }

    /**
     * 删除单个文件
     * @param fileUrl 文件URL
     * @return 删除结果
     */
    @DeleteMapping("/delete")
    public R deleteFile(@RequestParam("fileUrl") String fileUrl) {
        try {
            boolean success = ossUtil.deleteFile(fileUrl);
            if (success) {
                return R.ok("文件删除成功");
            } else {
                return R.error("文件删除失败");
            }
        } catch (Exception e) {
            return R.error("删除失败: " + e.getMessage());
        }
    }

    /**
     * 批量删除文件
     * @param fileUrls 文件URL列表
     * @return 删除结果
     */
    @DeleteMapping("/deleteBatch")
    public R deleteFiles(@RequestBody List<String> fileUrls) {
        try {
            if (fileUrls == null || fileUrls.isEmpty()) {
                return R.error("文件URL列表不能为空");
            }

            int successCount = ossUtil.deleteFiles(fileUrls.toArray(new String[0]));
            return R.ok("成功删除 " + successCount + " 个文件，共 " + fileUrls.size() + " 个文件");
        } catch (Exception e) {
            return R.error("批量删除失败: " + e.getMessage());
        }
    }
}